from django.shortcuts import render,redirect
from django import http
from django.views import View
from .models import User
from django.contrib.auth import authenticate, login
# from django.contrib.auth.models import User
import re
class RegisterView(View):
    def get(self, request):
        # 接收
        # 驗證
        # 處理
        # 响应   #展示注册页面
        return render(request, 'register.html')
    def post(self,request):      #创建用户对象，保存数据到表格
        # 1.接收
        user_name=request.POST.get('user_name')
        pwd=request.POST.get('pwd')
        cpwd=request.POST.get('cpwd')
        phone=request.POST.get('phone')
        allow=request.POST.get('allow')
        # 2.驗證  不知道请求是否是从客户端发送过来的,之前学过的Postman也可以发送，所以需要写代码条件验证
        # 2.1非空
        if not all([user_name, pwd, cpwd, phone, allow]):
            return http.HttpResponseBadRequest('参数不完整')   #状态码不同，此处选择的401
        # 2.2用户名格式
        if not re.match('^[a-zA-Z0-9-_]{5,20}$', user_name):
            return http.HttpResponseBadRequest('请输入5-20个字符的用户名')

        # 2.3用户名是否存在
        if User.objects.filter(username=user_name).count()>0:
            return http.HttpResponseBadRequest('该用户已注册')
        # 2.4密码格式
        if not re.match('^[0-9A-Za-z]{8,20}$', pwd):
            return http.HttpResponseBadRequest('请输入8-20位的密码')
        # 2.5重复输入的密码是否相等
        if cpwd != pwd:
            return http.HttpResponseBadRequest('两次输入的密码不一致')
        # 2.6手机号格式
        if not re.match('^1[345789]\d{9}$', phone):
            return http.HttpResponseBadRequest('您输入的手机号格式不正确')
        # 2.7手机号是否存在
        if User.objects.filter(mobile=phone).count()>0:
            return http.HttpResponseBadRequest('您输入的手机号已存在')
        # 短信验证码
        # 2.8 allow对应的复选框，如果不选中，则在请求报文中不包含这个数据，在非空处已经验证

        # 3.處理
        # 3.1问题：保存数据到表格,此处的密码需要加密后保存
        # user = User.objects.all(user_name=user_name, password=pwd, mobile=phone)
        # 解决 ：使用认证模块提供的创建用户的方法
        user = User.objects.create_user(username=user_name, password=pwd, mobile=phone)
        # 此处User直接继承自AbstractUser,它里边封装了create_user方法，，其他普通继承自models.Model用create
        # 3.2状态保持
        # request.session['user_id'] = 'user.id'
        login(request, user)
        # 4.响应
        return redirect('/')    # 跳转到首页

# 验证用户名是否存在，失去焦点后的验证
class UsernameCheckView(View):
    def get(self, request, username):

        # 接收# 驗證在路由规则中已经完成
        # 處理:查询用户名对应对象的个数
        count = User.objects.filter(username=username).count()
        # 响应
        return http.JsonResponse({
            'count':count
        })

# 验证手机号是否重复注册
class MobileCheckView(View):
    def get(self,request,mobile):

        count = User.objects.filter(mobile=mobile).count()
        return http.JsonResponse({
            'count':count
        })